package com.ruoyi.rpt.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.rpt.domain.RptCategory;
import com.ruoyi.rpt.domain.RptDefinition;

/**
 * 报表分类Service接口
 */
public interface IRptCategoryService {
    /**
     * 查询报表分类
     * 
     * @param categoryId 报表分类主键
     * @return 报表分类
     */
    public RptCategory selectRptCategoryByCategoryId(Long categoryId);

    /**
     * 查询报表分类列表
     * 
     * @param rptCategory 报表分类
     * @return 报表分类集合
     */
    public List<RptCategory> selectRptCategoryList(RptCategory rptCategory);

    /**
     * 构建前端所需要树结构
     * 
     * @param categories 分类列表
     * @return 树结构列表
     */
    public List<RptCategory> buildCategoryTree(List<RptCategory> categories);
    
    /**
     * 构建前端所需要下拉树结构
     * 
     * @param categories 分类列表
     * @return 下拉树结构列表
     */
    public List<Map<String, Object>> buildCategoryTreeSelect(List<RptCategory> categories);

    /**
     * 新增报表分类
     * 
     * @param rptCategory 报表分类
     * @return 结果
     */
    public int insertRptCategory(RptCategory rptCategory);

    /**
     * 修改报表分类
     * 
     * @param rptCategory 报表分类
     * @return 结果
     */
    public int updateRptCategory(RptCategory rptCategory);

    /**
     * 批量删除报表分类
     * 
     * @param categoryIds 需要删除的报表分类主键集合
     * @return 结果
     */
    public int deleteRptCategoryByCategoryIds(Long[] categoryIds);

    /**
     * 删除报表分类信息
     * 
     * @param categoryId 报表分类主键
     * @return 结果
     */
    public int deleteRptCategoryByCategoryId(Long categoryId);
    
    /**
     * 查询分类下的报表
     * 
     * @param categoryId 分类ID
     * @return 报表列表
     */
    public List<RptDefinition> selectReportsByCategory(Long categoryId);
    
    /**
     * 关联报表到分类
     * 
     * @param reportId 报表ID
     * @param categoryIds 分类ID数组
     * @return 结果
     */
    public int relateReportToCategories(Long reportId, Long[] categoryIds);
} 